/**
 * 公共API控制器
 * 提供跨项目基础数据接口
 */
const BaseController = require('../../../framework/controller/base_controller.js');
const BaseDataService = require('../service/base_data_service.js');
const EventModel = require('../config/models_config').event_model;
const EventService = require('../service/event_service.js');
const AppError = require('../../../framework/core/app_error.js');

class CommonController extends BaseController {
  /**
   * 获取用户列表
   */
  async getUserList() {
    // 权限验证
    if (!await this.isAdmin()) {
      return this.fail('没有操作权限');
    }
    
    try {
      const userList = await BaseDataService.getAllUsers();
      return this.success({
        total: userList.length,
        list: userList
      });
    } catch (err) {
      console.error('[CommonAPI] 获取用户列表失败:', err);
      return this.fail(err.message || '获取用户列表失败');
    }
  }
  
  /**
   * 获取用户详情
   */
  async getUserInfo() {
    // 获取请求参数
    const { userId } = this.getParams();
    
    if (!userId) {
      return this.fail('用户ID不能为空');
    }
    
    try {
      const userInfo = await BaseDataService.getUserById(userId);
      if (!userInfo) {
        return this.fail('用户不存在');
      }
      
      return this.success(userInfo);
    } catch (err) {
      console.error('[CommonAPI] 获取用户详情失败:', err);
      return this.fail(err.message || '获取用户详情失败');
    }
  }
  
  /**
   * 批量获取用户信息
   */
  async getUserBatch() {
    // 获取请求参数
    const { userIds } = this.getParams();
    
    if (!userIds || !Array.isArray(userIds) || userIds.length === 0) {
      return this.fail('用户ID列表不能为空');
    }
    
    try {
      const userMap = await BaseDataService.getUserBriefBatch(userIds);
      return this.success(userMap);
    } catch (err) {
      console.error('[CommonAPI] 批量获取用户信息失败:', err);
      return this.fail(err.message || '批量获取用户信息失败');
    }
  }
  
  /**
   * 获取部门列表
   */
  async getDeptList() {
    try {
      const deptList = await BaseDataService.getAllDepts();
      return this.success({
        total: deptList.length,
        list: deptList
      });
    } catch (err) {
      console.error('[CommonAPI] 获取部门列表失败:', err);
      return this.fail(err.message || '获取部门列表失败');
    }
  }
  
  /**
   * 获取事件列表
   */
  async getEventList() {
    // 权限验证
    if (!await this.isAdmin()) {
      return this.fail('没有操作权限');
    }
    
    // 获取请求参数
    const { 
      page = 1, 
      size = 20, 
      status, 
      projectId 
    } = this.getParams();
    
    try {
      const eventModel = new EventModel();
      const result = await eventModel.getProjectEvents(projectId, {
        page: parseInt(page),
        size: parseInt(size),
        status: status !== undefined ? parseInt(status) : undefined
      });
      
      return this.success(result);
    } catch (err) {
      console.error('[CommonAPI] 获取事件列表失败:', err);
      return this.fail(err.message || '获取事件列表失败');
    }
  }
  
  /**
   * 获取事件详情
   */
  async getEventDetail() {
    // 权限验证
    if (!await this.isAdmin()) {
      return this.fail('没有操作权限');
    }
    
    // 获取请求参数
    const { eventId } = this.getParams();
    
    if (!eventId) {
      return this.fail('事件ID不能为空');
    }
    
    try {
      const eventModel = new EventModel();
      const eventInfo = await eventModel.getEventById(eventId);
      
      if (!eventInfo) {
        return this.fail('事件不存在');
      }
      
      return this.success(eventInfo);
    } catch (err) {
      console.error('[CommonAPI] 获取事件详情失败:', err);
      return this.fail(err.message || '获取事件详情失败');
    }
  }
  
  /**
   * 重试失败事件
   */
  async retryEvent() {
    // 权限验证
    if (!await this.isAdmin()) {
      return this.fail('没有操作权限');
    }
    
    // 获取请求参数
    const { eventId } = this.getParams();
    
    if (!eventId) {
      return this.fail('事件ID不能为空');
    }
    
    try {
      const eventModel = new EventModel();
      const eventInfo = await eventModel.getEventById(eventId);
      
      if (!eventInfo) {
        return this.fail('事件不存在');
      }
      
      if (eventInfo.status !== eventModel.STATUS.FAILED) {
        return this.fail('只能重试失败的事件');
      }
      
      // 重置事件状态为待处理
      await eventModel.updateEventStatus(eventId, eventModel.STATUS.PENDING);
      
      return this.success({ success: true });
    } catch (err) {
      console.error('[CommonAPI] 重试事件失败:', err);
      return this.fail(err.message || '重试事件失败');
    }
  }
}

module.exports = CommonController; 